From f8cb83aea5717a1392fd1fe17e8f6de15c8fdb1d Mon Sep 17 00:00:00 2001 From: robertlipe Date: Sat, 30 Mar 2013 04:53:47 +0000 Subject: [PATCH] Moving more of our core data structures to QStrings. git-svn-id: http://gpsbabel.googlecode.com/svn/trunk@4369 f51c46e8-681c-474f-0cfe-069cfd0219fb --- gpsbabel/cetus.cc | 4 ++-- gpsbabel/defs.h | 9 ++++----- gpsbabel/delbin.cc | 6 +++--- gpsbabel/html.cc | 4 ++-- gpsbabel/kml.cc | 6 +++--- gpsbabel/palmdoc.cc | 4 ++-- gpsbabel/text.cc | 4 ++-- gpsbabel/util.cc | 20 +++++++++++--------- gpsbabel/waypt.cc | 17 ++--------------- 9 files changed, 31 insertions(+), 43 deletions(-) diff --git a/gpsbabel/cetus.cc b/gpsbabel/cetus.cc index f8d8e6394..bf646f00c 100644 --- a/gpsbabel/cetus.cc +++ b/gpsbabel/cetus.cc @@ -514,7 +514,7 @@ cetus_writewpt(const waypoint* wpt) desc_geo = xstrdup(""); } - if (wpt->gc_data->desc_short.utfstring) { + if (!wpt->gc_data->desc_short.utfstring.isEmpty()) { char* stripped_html = strip_html(&wpt->gc_data->desc_short); desc_short = xstrdup(wpt->gc_data->diff == 0 ? "\n\n" : ""); desc_short = xstrappend(desc_short, xstrdup(stripped_html)); @@ -523,7 +523,7 @@ cetus_writewpt(const waypoint* wpt) desc_short = xstrdup(""); } - if (wpt->gc_data->desc_long.utfstring) { + if (!wpt->gc_data->desc_long.utfstring.isEmpty()) { char* stripped_html = strip_html(&wpt->gc_data->desc_long); desc_long = xstrdup("\n\n"); desc_long = xstrappend(desc_long, xstrdup(stripped_html)); diff --git a/gpsbabel/defs.h b/gpsbabel/defs.h index 5a27eb0ed..8a709b20d 100644 --- a/gpsbabel/defs.h +++ b/gpsbabel/defs.h @@ -263,11 +263,10 @@ typedef enum { class utf_string{ public: utf_string() : - is_html(false), - utfstring(NULL) + is_html(false) {}; bool is_html; - char* utfstring; + QString utfstring; }; class geocache_data { @@ -996,7 +995,7 @@ const char* gs_get_container(geocache_container t); char* xml_entitize(const char* str); char* html_entitize(const char* str); char* strip_html(const utf_string*); -char* strip_nastyhtml(const char* in); +char* strip_nastyhtml(const QString& in); char* convert_human_date_format(const char* human_datef); /* "MM,YYYY,DD" -> "%m,%Y,%d" */ char* convert_human_time_format(const char* human_timef); /* "HH+mm+ss" -> "%H+%M+%S" */ char* pretty_deg_format(double lat, double lon, char fmt, const char* sep, int html); /* decimal -> dd.dddd or dd mm.mmm or dd mm ss */ @@ -1027,7 +1026,7 @@ xml_tag* xml_findfirst(xml_tag* root, const char* tagname); xml_tag* xml_findnext(xml_tag* root, xml_tag* cur, const char* tagname); char* xml_attribute(xml_tag* tag, const char* attrname); -char* rot13(const char* str); +char* rot13(const QString& str); /* * PalmOS records like fixed-point numbers, which should be rounded diff --git a/gpsbabel/delbin.cc b/gpsbabel/delbin.cc index 51635ae4d..7846c4467 100644 --- a/gpsbabel/delbin.cc +++ b/gpsbabel/delbin.cc @@ -1246,16 +1246,16 @@ get_gc_notes(const waypoint* wp, int* symbol, char** notes, unsigned* notes_size if (wp->gc_data->hint && !opt_hint_at_end) { gbfprintf(fd, "HINT: %s\n", wp->gc_data->hint); } - if (wp->gc_data->desc_short.utfstring || wp->gc_data->desc_long.utfstring) { + if (!wp->gc_data->desc_short.utfstring.isEmpty() || !wp->gc_data->desc_long.utfstring.isEmpty()) { gbfputs("DESC: ", fd); - if (wp->gc_data->desc_short.utfstring) { + if (!wp->gc_data->desc_short.utfstring.isEmpty()) { char* s1 = strip_html(&wp->gc_data->desc_short); char* s2 = cet_str_utf8_to_any(s1, global_opts.charset); gbfprintf(fd, "%s\n", s2); xfree(s2); xfree(s1); } - if (wp->gc_data->desc_long.utfstring) { + if (!wp->gc_data->desc_long.utfstring.isEmpty()) { char* s1 = strip_html(&wp->gc_data->desc_long); char* s2 = cet_str_utf8_to_any(s1, global_opts.charset); gbfputs(s2, fd); diff --git a/gpsbabel/html.cc b/gpsbabel/html.cc index 57c154fe7..f24c57f95 100644 --- a/gpsbabel/html.cc +++ b/gpsbabel/html.cc @@ -134,12 +134,12 @@ html_disp(const waypoint* wpt) gbfprintf(file_out, ""); - if (wpt->gc_data->desc_short.utfstring) { + if (!wpt->gc_data->desc_short.utfstring.isEmpty()) { char* tmpstr = strip_nastyhtml(wpt->gc_data->desc_short.utfstring); gbfprintf(file_out, "

%s

\n", tmpstr); xfree(tmpstr); } - if (wpt->gc_data->desc_long.utfstring) { + if (!wpt->gc_data->desc_long.utfstring.isEmpty()) { char* tmpstr = strip_nastyhtml(wpt->gc_data->desc_long.utfstring); gbfprintf(file_out, "

%s

\n", tmpstr); xfree(tmpstr); diff --git a/gpsbabel/kml.cc b/gpsbabel/kml.cc index be6b21de7..6a1f4c1c7 100644 --- a/gpsbabel/kml.cc +++ b/gpsbabel/kml.cc @@ -1420,7 +1420,7 @@ static void kml_write_data_element(const char* name, const double value) AUTOFORMATTING_RESTORE(af); } -static void kml_write_cdata_element(const char* name, const char* value) +static void kml_write_cdata_element(const char* name, const QString& value) { writer.writeStartElement("Data"); writer.writeAttribute("name", name); @@ -1503,8 +1503,8 @@ static void kml_geocache_pr(const waypoint* waypointp) kml_write_data_element("gc_type", gs_get_cachetype(waypointp->gc_data->type)); kml_write_data_element("gc_icon", is); - kml_write_cdata_element("gc_short_desc", waypointp->gc_data->desc_short.utfstring ? waypointp->gc_data->desc_short.utfstring : ""); - kml_write_cdata_element("gc_long_desc", waypointp->gc_data->desc_long.utfstring ? waypointp->gc_data->desc_long.utfstring : ""); + kml_write_cdata_element("gc_short_desc", waypointp->gc_data->desc_short.utfstring); + kml_write_cdata_element("gc_long_desc", waypointp->gc_data->desc_long.utfstring); logs = kml_geocache_get_logs(waypointp); kml_write_cdata_element("gc_logs", logs); xfree(logs); diff --git a/gpsbabel/palmdoc.cc b/gpsbabel/palmdoc.cc index 4fa0a8f25..43c820a6f 100644 --- a/gpsbabel/palmdoc.cc +++ b/gpsbabel/palmdoc.cc @@ -454,12 +454,12 @@ palmdoc_disp(const waypoint *wpt) docprintf(100, "%s/%s\n", gs_get_cachetype(wpt->gc_data->type), gs_get_container(wpt->gc_data->container)); - if (wpt->gc_data->desc_short.utfstring) { + if (!wpt->gc_data->desc_short.utfstring.isEmpty()) { char *stripped_html = strip_html(&wpt->gc_data->desc_short); docprintf(10+strlen(stripped_html), "\n%s\n", stripped_html); xfree(stripped_html); } - if (wpt->gc_data->desc_long.utfstring) { + if (!wpt->gc_data->desc_long.utfstring.isEmpty()) { char *stripped_html = strip_html(&wpt->gc_data->desc_long); docprintf(10+strlen(stripped_html), "\n%s\n", stripped_html); xfree(stripped_html); diff --git a/gpsbabel/text.cc b/gpsbabel/text.cc index 8aed2fce2..7a65a66f1 100644 --- a/gpsbabel/text.cc +++ b/gpsbabel/text.cc @@ -152,12 +152,12 @@ text_disp(const waypoint *wpt) gs_get_cachetype(wpt->gc_data->type), gs_get_container(wpt->gc_data->container), (int)(wpt->gc_data->diff / 10), (wpt->gc_data->diff%10)?".5":"", (int)(wpt->gc_data->terr / 10), (wpt->gc_data->terr%10)?".5":""); - if (wpt->gc_data->desc_short.utfstring) { + if (!wpt->gc_data->desc_short.utfstring.isEmpty()) { char *stripped_html = strip_html(&wpt->gc_data->desc_short); gbfprintf(file_out, "\n%s\n", stripped_html); xfree(stripped_html); } - if (wpt->gc_data->desc_long.utfstring) { + if (!wpt->gc_data->desc_long.utfstring.isEmpty()) { char *stripped_html = strip_html(&wpt->gc_data->desc_long); gbfprintf(file_out, "\n%s\n", stripped_html); xfree(stripped_html); diff --git a/gpsbabel/util.cc b/gpsbabel/util.cc index 54ea46114..8088a6c0f 100644 --- a/gpsbabel/util.cc +++ b/gpsbabel/util.cc @@ -1246,9 +1246,9 @@ strlower(char *src) } char * -rot13(const char *s) +rot13(const QString& s) { - char *result = xstrdup(s); + char *result = xstrdup(s.toUtf8().data()); char *cur = result; int flip = 1; while (cur && *cur) { @@ -1481,13 +1481,13 @@ pretty_deg_format(double lat, double lon, char fmt, const char *sep, int html) * - stop overriding styles for everything */ char * -strip_nastyhtml(const char * in) +strip_nastyhtml(const QString& in) { char *returnstr, *sp; char *lcstr, *lcp; - sp = returnstr = xstrdup(in); - lcp = lcstr = strlower(xstrdup(in)); + sp = returnstr = xstrdup(in.toUtf8().data()); + lcp = lcstr = strlower(xstrdup(in.toUtf8().data())); while (lcp = strstr(lcstr, ""), NULL != lcp) { sp = returnstr + (lcp - lcstr) ; /* becomes */ @@ -1574,19 +1574,21 @@ strip_nastyhtml(const char * in) char * strip_html(const utf_string *in) { - char *outstring, *out; - char *instr = in->utfstring; + char* outstring, *out; + // If toUtf8() is used here, we double encode in the OSM test case. + // this may be a bug here or elsewhere. + char* instr = xstrdup(in->utfstring.toAscii().data()); char tag[8]; unsigned short int taglen = 0; if (!in->is_html) { - return xstrdup(in->utfstring); + return instr; } /* * We only shorten, so just dupe the input buf for space. */ - outstring = out = xstrdup(in->utfstring); + outstring = out = xstrdup(in->utfstring.toUtf8().data()); tag[0] = 0; while (*instr) { diff --git a/gpsbabel/waypt.cc b/gpsbabel/waypt.cc index 7a04e5f7d..2106a97fe 100644 --- a/gpsbabel/waypt.cc +++ b/gpsbabel/waypt.cc @@ -94,16 +94,9 @@ waypt_dupe(const waypoint *wpt) tmp->gc_data->desc_short.is_html = wpt->gc_data->desc_short.is_html; tmp->gc_data->desc_long.is_html = wpt->gc_data->desc_long.is_html; tmp->gc_data->favorite_points = wpt->gc_data->favorite_points; + tmp->gc_data->desc_short.utfstring = wpt->gc_data->desc_short.utfstring; + tmp->gc_data->desc_long.utfstring = wpt->gc_data->desc_long.utfstring; - // memcpy(gc_data, wpt->gc_data, sizeof(*gc_data)); - if (wpt->gc_data->desc_short.utfstring) { - tmp->gc_data->desc_short.utfstring = - xstrdup(wpt->gc_data->desc_short.utfstring); - } - if (wpt->gc_data->desc_long.utfstring) { - tmp->gc_data->desc_long.utfstring = - xstrdup(wpt->gc_data->desc_long.utfstring); - } if (wpt->gc_data->placer) { tmp->gc_data->placer = xstrdup(wpt->gc_data->placer); } @@ -426,12 +419,6 @@ waypt_free(waypoint *wpt) if (wpt->gc_data != &empty_gc_data) { geocache_data *gc_data = (geocache_data *)wpt->gc_data; - if (gc_data->desc_short.utfstring) { - xfree(gc_data->desc_short.utfstring); - } - if (gc_data->desc_long.utfstring) { - xfree(gc_data->desc_long.utfstring); - } if (gc_data->placer) { xfree(gc_data->placer); } -- 2.30.2